iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
1
DevOps

DevOps with Proxmox系列 第 15

Day 15 - Terraform & Ansible 混合應用

  • 分享至 

  • xImage
  •  

昨天大概說明完 Terraform 如何呼叫 Ansible,幫助我們建立環境
我們今天就來看具體來說在 Proxmox VE 上這件事該怎麽達成

首先,我們會遇到第一個問題, Ansible 使用的 inventory 無法自動產生
的確現在有些工具可以幫助你將 Terraform 的 terraform.tfstate 轉換成 Ansible 的 inventory 格式,但到目前為止沒有工具能把 Proxmox VE 的內容轉換成 Ansible 的 inventory

這下我們就需要自己告訴 Ansible 該連到什麼 IP 了,不過 Terraform 也不會回傳容器/VM 裡的 IP,這下該怎麽辦呢?
先用個 dirty hack 解這塊,我們手動設定容器/VM 的 IP

我們來看 Terraform 的設定檔

variable "lxc_ip" {
  type        = string
  description = "IP for lxc"
  default     = "<IP>"
}

resource "proxmox_lxc" "lxc-test" {
  hostname = "lxc-test-host"
  cores    = 1
  memory   = "512"
  swap     = "512"
  network {
    name     = "eth0"
    bridge   = "vmbr0"
    ip       = "${var.lxc_ip}/<MASK>"
    gw       = "<GATEWAY>"
    firewall = true
  }
  ostemplate      = "local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz"
  password        = "insecurepassword"
  rootfs          = "local-lvm:8"
  storage         = "local-lvm"
  target_node     = "ithelp"
  unprivileged    = true
  start           = true
  ssh_public_keys = "<PUBLIC_KEY>"
  provisioner "local-exec" {
    command = "sleep 30; ansible-playbook -u root -i '${var.lxc_ip},' webserver.yml;"
  }
}

我們這裡使用的 Ansible Playbook 是我們先前示範 Ansible Playbook 時所建立的 Playbook,不過我們在 webserver.yml 裡把 hosts: webservers 更改為 hosts: all
這樣 Ansible Playbook 在執行時會對所有機器去設定,而因為我們只告訴 Ansible 一臺機器,所以他也只會設定一臺機器

實際執行效果大概如下

terraform_apply_with_ansible_playbook

Terraform 和 Ansible 的範例大概到這裡
我們明天會介紹一些資源監控工具


上一篇
Day 14 - Terraform & Ansible 混合簡介
下一篇
Day 16 - 監測服務 - Grafana
系列文
DevOps with Proxmox30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言